系统设计概述
如何设计大型系统是本章的核心问题。系统设计是一个很宽泛的话题,讨论最多的是可扩展、可维护、高性能…
系统设计涵盖了 从系统的需求分析、功能设计、流程规划,到系统的实施、测试、部署以及后续的维护等整个生命周期的设计活动。
其目的是确保大型系统能够满足业务需求,具备高可靠性、高性能、可扩展性、可维护性等特性
而另一个概念,架构设计 主要聚焦在系统的整体架构层面,是对系统的结构、组件、模块以及它们之间的关系进行抽象和设计,以确定系统的整体框架和高层次的设计决策,为系统的实现提供一个结构化的蓝图。
资料来源:https://github.com/donnemartin/system-design-primer
以下是系统设计的速查表(Cheat sheet)「架构师的宝典」,具体的内容在各章节展开。
展开的方式:概念、应用场景、原理、比对、
一、网络(Networking)
1.1 域名系统
1.2 CDN
1.3 负载均衡器
1.4 其它
1.4.1 代理
1.4.2 NAT
1.4.3 路由器
1.4.4 防火墙
二、存储(Storage)
2.1 数据库
SQL、NoSQL(键值、文档、列、图)、NewSQL
2.2 缓存
Redis、CDN边缘缓存、Varnish
2.3 其它
2.3.1 对象存储和
2.3.2 文件系统
2.3.3 块存储
网络附加存储(NAS)、存储区域网络(SAN)
三、计算
3.1 服务器
裸机、虚拟机、容器
3.2 容器
Docker、Kubernetes、容器编排
3.3 其它
3.3.1 FaaS/Paas
FaaS:函数即服务
PaaS:平台即服务
四、通信(Communication)
五、安全(Security)
5.1 风控
5.2 加密
六、架构设计
架构设计是系统设计的关键部分。主要关注系统的整体结构、组件划分、模块之间的关系以及系统与外部环境的交互等高层次的设计决策,它为系统设计提供了一个整体的框架和蓝图,是系统设计中最为关键和核心的部分。
例如,在设计一个复杂的企业级信息系统时,架构设计会确定采用微服务架构还是单体架构,规定各个微服务或模块的职责以及它们之间的通信方式,这为后续的系统详细设计、开发和维护奠定了基础。
6.1 系统设计的关系
对数据库选项和优化的理解,比如关系型数据库和非关系型数据库 的应用场景。
通过消息队列进行 削峰填谷。
怎么通过容器实现 快速部署和资源隔离。
如何结合业务需求进行前瞻性架构设计。
系统设计为架构设计提供支撑和补充,系统设计中的其他方面,如详细设计、接口设计、数据设计等,是在架构设计的基础上进行的。它们对架构设计进行细化和完善,使系统能够真正实现其功能和性能要求。
例如,架构设计确定了系统的整体模块划分和通信机制后,详细设计会进一步考虑每个模块内部的算法设计、数据结构以及模块之间接口的具体参数和调用方式等。同时,系统设计中的非功能性需求分析,如性能、可靠性、安全性等方面的分析,也会影响架构设计的决策,为架构设计提供必要的支撑和补充信息。
「相互影响、迭代优化」
在实际的系统开发过程中,系统设计和架构设计不是一次性完成的,而是一个相互影响、迭代优化的过程。
随着系统设计的深入,可能会发现架构设计存在一些问题或需要调整的地方,例如在详细设计阶段发现某个模块的设计过于复杂,影响到系统的可维护性,这就需要对架构进行重新评估和调整。同样,架构设计的变更也会影响到系统设计的其他方面,如模块划分的改变可能导致接口设计的调整以及数据流向的变化等。通过这种不断的反馈和迭代,使系统设计和架构设计逐步完善,最终形成一个满足用户需求、性能良好且易于维护的系统。
七、其它知识
7.1 分布式系统
7.2 系统设计模式
7.2.1 性能与可扩展性
7.2.2 设计思想
软件设计模式
DDD(领域驱动设计)「命令查询职责分离-CQRS;贫血,充血模型」
Actor模式
响应式编程
7.3 其它中间件
7.3.1 日志系统
7.3.2 配置中心
7.3.3 API网关
7.3.4 定时调度
7.3.5 消息队列
7.4 技术支持
7.4.1 DevOps
7.4.2 测试
TDD理论、单元测试、集成测试、压力测试、全链路压测、A/B Test
7.4.3 虚拟化
7.4.4 自动化运维
7.4.5 持续集成
7.4.6 统计分析
7.4.7 监控系统
7.5 架构优化专题
7.5.1 延迟与吞吐量
7.5.2 可用性与一致性
7.5.3 性能优化
性能优化方法论、 容量评估
CDN网络、连接池、性能调优
7.5.4 代码优化
代码结构优化、CodeReview规范
7.5.5 异步
7.6 文档能力
文档模板(报告、规划、规范 编写)
系统性解决问题思维,牵头能力(大中型项目重构、架构优化-找问题、解决问题)
技术愿景、技术布道、开源项目及技术分享。
7.7 项目管理
架构评审、重构、代码规范、RUP、看板管理、SCRUM、极限编程、敏捷开发、结对编程
可观测性(Observability)
架构模式(Architectural Patterns)
可扩展和可靠性(Scalability & Reliability)

可能的问题有哪些??
这个岗位的理解?
做哪些事情??
分析..
问题的大小??